﻿// --------------
// 作者:Vitity
// --------------

namespace NICWebApi.Extensions.RESTfulResult.Providers;

/// <summary>
/// 定义一个RESTful结果提供者类，实现IUnifyResultProvider接口
/// </summary>
public class RESTfulResultProvider : IUnifyResultProvider
{
    /// <summary>
    /// 异常返回值
    /// </summary>
    /// <param name="context">异常上下文，包含异常的相关信息</param>
    /// <param name="data">异常数据</param>
    /// <returns>返回一个JsonResult，包含统一格式的RESTful结果</returns>
    public IActionResult OnException(ExceptionContext context, object data)
    {
        // 调用UnifyContext的RESTfulResult方法，生成一个状态码为500的RESTful结果
        // 状态码500表示服务器内部错误，data为异常数据
        return new JsonResult(UnifyContext.RESTfulResult(StatusCodes.Status500InternalServerError, errors: data));
    }

    /// <summary>
    /// 请求成功返回
    /// </summary>
    /// <param name="context">动作执行上下文，包含动作执行的相关信息</param>
    /// <param name="data">返回的数据</param>
    /// <returns>返回一个JsonResult，包含统一格式的RESTful结果</returns>
    public IActionResult OnSucceeded(ActionExecutedContext context, object data)
    {
        // 调用UnifyContext的RESTfulResult方法，生成一个状态码为200的RESTful结果
        // 状态码200表示请求成功，true表示操作成功，data为返回的数据
        return new JsonResult(UnifyContext.RESTfulResult(StatusCodes.Status200OK, true, data));
    }

    /// <summary>
    /// 请求失败返回
    /// </summary>
    /// <param name="context">动作执行上下文，包含动作执行的相关信息</param>
    /// <param name="data">错误验证信息</param>
    /// <returns>返回一个JsonResult，包含统一格式的RESTful结果</returns>
    public IActionResult OnValidateFailed(ActionExecutingContext context, object data)
    {
        // 调用UnifyContext的RESTfulResult方法，生成一个状态码为400的RESTful结果
        // 状态码400表示请求无效，通常用于参数验证失败的情况
        return new JsonResult(UnifyContext.RESTfulResult(StatusCodes.Status400BadRequest, errors: data));
    }
}